package com.fx.zmlzml.util;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 时间 zone 工具类
 */
public class TimeZoneUtil {

    private TimeZoneUtil() {
        // 工具类，防止实例化
    }

    /**
     * 将带时区的时间转换为 UTC 时间的 LocalDateTime
     */
    public static LocalDateTime toUtcLocalDateTime(ZonedDateTime zonedDateTime) {
        return zonedDateTime.withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
    }

    /**
     * 将带时区的时间字符串转换为 UTC 时间的 LocalDateTime
     */
    public static LocalDateTime parseToUtc(String dateTimeStr) {
        // 支持 ISO 8601 格式: 2024-05-24T12:00:00+08:00 或 2024-05-24T04:00:00Z
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr);
        return toUtcLocalDateTime(zonedDateTime);
    }

    /**
     * 获取原始时区信息
     */
    public static String getOriginalTimezone(ZonedDateTime zonedDateTime) {
        return zonedDateTime.getZone().getId();
    }

    /**
     * 将 UTC 时间转换为指定时区的本地时间
     */
    public static ZonedDateTime utcToLocalTime(LocalDateTime utcTime, String targetTimezone) {
        ZoneId zoneId = ZoneId.of(targetTimezone);
        return utcTime.atZone(ZoneOffset.UTC).withZoneSameInstant(zoneId);
    }

    /**
     * 将 UTC 时间转换为指定时区的本地时间字符串
     */
    public static String formatToLocalTime(LocalDateTime utcTime, String targetTimezone, String pattern) {
        ZonedDateTime localTime = utcToLocalTime(utcTime, targetTimezone);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return localTime.format(formatter);
    }

    /**
     * 获取当前 UTC 时间
     */
    public static LocalDateTime currentUtcTime() {
        return LocalDateTime.now(ZoneOffset.UTC);
    }

}
